package cn.stylefeng.guns.modular.business.service;


import cn.stylefeng.guns.modular.business.model.dto.BindingUserInfoDTO;
import cn.stylefeng.guns.modular.business.model.result.*;
import cn.stylefeng.guns.sys.modular.system.entity.Dict;
import cn.stylefeng.guns.sys.modular.system.entity.User;
import cn.stylefeng.guns.sys.modular.system.model.UserDto;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 用户等级表 服务类
 * </p>
 *
 * @author jwj
 * @since 2019-07-18
 */
public interface AccountService extends IService<User> {


    /**
     * 新增
     *
     * @author jwj
     * @Date 2019-07-18
     */
    User reg(UserDto param);

    /**
     * 新增
     *
     * @author jwj
     * @Date 2019-07-18
     */
    User wxReg(UserDto param);

    /**
     * 个人信息
     *
     * @param userId 用户id
     * @return
     */
    UserInformationResult information(long userId);


    /**
     * 个人信息
     *
     * @param userId 用户id
     * @return
     */
    AccountGradeResult getUserGrade(long userId);

    /**
     * 修改用户昵称
     *
     * @param userId 用户id
     * @param name   昵称
     */
    boolean updateName(long userId, String name, String headUrl);

    /**
     * 接收微信消息推送
     *
     * @param userId      用户id
     * @param messagePush 接收消息推送（0：接收，1：拒绝）
     * @return
     */
    boolean messagePush(long userId, String messagePush);

    /**
     * 修改或添加微信号
     *
     * @param userId      用户id
     * @param wxID 微信id
     * @return
     */
    boolean saveWxID(long userId, String wxID);

    /**
     * 修改手机号
     *
     * @param userId   用户id
     * @param oldPhone 旧手机号
     * @param newPhone 新手机号
     * @param smsCode  验证码
     * @return
     */
    boolean changePhone(long userId, String oldPhone, String newPhone, String smsCode);

    /**
     * 修改密码
     *
     * @param userId      用户id
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return
     */
    boolean changePassword(long userId, String oldPassword, String newPassword);

    /**
     * 修改密码
     * @param account
     * @param password
     * @return
     */
    boolean changePassword(String account, String password);

    /**
     * 联系我们
     *
     * @return
     */
    List<Dict> contactUs();

    /**
     * 发送短信
     * @param phone
     * @param templateCode
     * @return
     */
    boolean sendSMS(String phone, String templateCode);

    /**
     * 验证短信
     * @param phone
     * @param code
     * @return
     */
    boolean invalidSMS(String phone, String code);

    /**
     * 获取微信token
     *
     * @return wxtoken
     */
    String getWxToken();

    /**
     * 获取openid
     *
     * @param code 微信code
     * @return openid
     */
    String getOpenId(String code);


    BingingResultView binding(BindingUserInfoDTO bindingUserInfoDTO);


    void checkUserBingStatusAndSendMessage(String phone, String openid);

    /**
     * 根据微信获取凭证
     *
     * @param openId 微信
     * @return BingingResultView
     */
    BingingResultView getAccountTokenWeixin(String openId);

    /**
     * 获取我的团队汇总
     * @param userId
     * @return
     */
    UserTeamResult getMyTeamTotal(Long userId);

    /**
     * 获取余额详情
     * @param moneyId
     * @return
     */
    MoneyLogResult getMoneyDetail(Integer moneyId);

    /**
     * 获取我的推广图片列表
     * @param userId
     * @return
     */
    List<String> getRefeeImages(Long userId);

    /**
     * 获取我的平台推广图片列表
     * @param userId
     * @return
     */
    List<String> getPTRefeeImages(Long userId);

}
